package com.sqlcheck.controller;

import com.sqlcheck.dto.response.TaskProgressInfo;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.messaging.handler.annotation.DestinationVariable;
import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.messaging.simp.annotation.SubscribeMapping;
import org.springframework.stereotype.Controller;

/**
 * WebSocket控制器
 * 处理任务进度相关的WebSocket消息
 */
@Controller
@RequiredArgsConstructor
@Slf4j
public class WebSocketController {

    /**
     * 客户端订阅任务进度时的处理
     * 当客户端订阅 /topic/task/{taskId}/progress 时会触发此方法
     */
    @SubscribeMapping("/task/{taskId}/progress")
    public TaskProgressInfo handleTaskProgressSubscription(@DestinationVariable Long taskId) {
        log.info("客户端订阅任务进度: taskId={}", taskId);

        // 可以返回当前任务的最新进度状态（如果有缓存的话）
        // 这里返回一个订阅确认消息
        return TaskProgressInfo.progress(taskId, null, 0, "已连接到任务进度推送");
    }

    /**
     * 处理客户端发送的进度查询请求
     */
    @MessageMapping("/task/{taskId}/query-progress")
    @SendTo("/topic/task/{taskId}/progress")
    public TaskProgressInfo queryTaskProgress(@DestinationVariable Long taskId) {
        log.info("收到任务进度查询请求: taskId={}", taskId);

        // 这里可以查询并返回任务的当前进度状态
        // 暂时返回一个查询响应
        return TaskProgressInfo.progress(taskId, null, 0, "进度查询响应");
    }

    /**
     * 处理客户端的ping请求（保持连接活跃）
     */
    @MessageMapping("/ping")
    @SendTo("/topic/pong")
    public String handlePing() {
        return "pong";
    }
}